const { Router } = require("express");
//md5加密的方式
const md5 = require("md5");
const JWT = require("jsonwebtoken");
const User = require("../model/User");

const router = new Router();


/* 
登录
url: /api/auth/login
method: POST
params: username password
*/
router.post("/login", async (req, res) => {
  // 获取post请求的参数
  const { username, password } = req.body;

  // 判断参数是否为空
  if (!username || !password) {
    res.status(400).json({ message: "缺少参数" });
    return;
  }

  // 查询用户是否存在，判断密码是否正确
  const user = await User.findOne(
    { username, password: md5(password) },
    { password: false }
  ).lean();
  if (user) {
    // 生成token给客户端
    const token = JWT.sign(user, "hello world", { expiresIn: "1d" });
    // 响应客户端token
    res.status(200).json({ message: "登录成功", token });
  } else {
    res.status(400).json({ message: "用户名或密码错误" });
  }
});

/* 
检查用户是否登录了
url: /api/auth/login
method: POST
header: authorization
*/
router.get("/check_login", async (req, res) => {
  try {
    // 获取token
    const token = req.headers["authorization"].replace("Bearer ", ""); //没有token，有错误

    // 解析token
    const userInfo = JWT.verify(token, "hello world"); //过期了，也会报错

    // 处理用户信息
    const user = await User.findById(userInfo._id);

    if (user) {
      //登录未过期
      res.status(200).json({ message: "登录成功" });
    } else {
      //该用户不存在了
      res.status(400).json({ message: "登录失败" });
    }
  } catch (error){
    //token过期了，需要重新登录
    res.status(400).json({ message: "请重新登录" });
  }
});

module.exports = router;
